home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 7442 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  2.2 KB

  1. Path: hermes.louisville.edu!starbase!gclind01
  2. From: gclind01@starbase.spd.louisville.edu (George C. Lindauer)
  3. Newsgroups: comp.os.msdos.programmer,comp.lang.asm.x86,comp.lang.c
  4. Subject: Re: Urg,ent, keyboard buffer overflow
  5. Date: 26 Feb 1996 17:22:17 GMT
  6. Organization: University of Louisville, Louisville KY USA
  7. Message-ID: <4gsq89$48t@hermes.louisville.edu>
  8. References: <Pine.SOL.3.91.960225103721.16366A-100000@hamlet.uncg.edu>
  9. NNTP-Posting-Host: starbase.spd.louisville.edu
  10. X-Newsreader: NN version 6.5.0 CURRENT #16
  11.  
  12. "Bin . Lee" <b_lee2@hamlet.uncg.edu> writes:
  13.  
  14.  
  15. >Hi, folks:
  16.  
  17. >I wrote a DOS program in Borland C++, because my interrupt service routine
  18. >block OS for 3 millisecond of every 5 millisecond, I think this cause 
  19. >bios no time to serve and check keyboard buffer, which cause keybord buffer
  20. >overflow.
  21.  
  22. >Two questions:
  23. >1. related to process of bios handler keyboard buffer, when IRQ1 generate 
  24. >a interrupt, but has not finished its ISR, can other IRQ, such as IRQ7 
  25. >generate a interrupt in between ? How can keyboard buffer overflow happen ?
  26.  
  27. If you have to have an ISR that takes so long, it is good to issue the EOI
  28. (out 20h, 20h) early in the interrupt so higher interrupts can interrupt you.
  29. In general though if processing takes so long you defer it from the ISR to
  30. a task and just get out of the ISR.
  31.  
  32. >2. cli and sti will disable and enable all IRQ, is there a instruction which
  33. >will only disable and enable one specific IRQ, like IRQ7.
  34.  
  35. For the lower 8 IRQs, you can access port 21h.  IRQ 7 corresponds to bit 7;
  36. to enable IRQ7 you would do:
  37.  
  38. in al,21h
  39. and al,07fh
  40. out 21h,al
  41.  
  42. and to disalbe it you would do:
  43.  
  44. in al,21h
  45. or al,80h
  46. out 21h,al
  47.  
  48. This is a PC hardware thing, not something that is built into the x86
  49. processor series.
  50.  
  51. David
  52.  
  53. >structure of my program
  54.  
  55. >int main(void)
  56. >{
  57. >     InstallExternalTimingIRQ7ISR()
  58.  
  59. >        while( waitkey() )
  60. >    {
  61. >        doKeyboardInput_ScrOutout();
  62. >    }
  63. >        
  64. >        ReinstallOldIRQ7ISR();
  65. >}
  66. >My interrupt happens every 5 ms and program need 3 ms to finish its ISR,
  67. >during this time, I use cli and sti to protect its service, how will this 
  68. >affect keyboard interrupt ? The interrupt I used is external circuit 
  69. >generate 5 ms interrupt connect to IRQ7.
  70.  
  71. >Thanks folks, this is urgent for me, please send me a mail.
  72.  
  73.  
  74. >Bin  
  75.